package main

import (
	"code.project.com/chatroom/common/message"
	process2 "code.project.com/chatroom/server/process"
	"code.project.com/chatroom/server/utils"

	"fmt"
	"io"
	"net"
)

// 总控  总调度

// 先创建一个Process 的结构体
type Processor struct {
	Conn net.Conn
}

// serverProcess 函数
// 根据客户端发送消息的不同，决定那个函数来处理
func (p *Processor) serverProcessMes(mes *message.Message) (err error) {

	// 从可短是否能接受到客户端群发的消息
	//fmt.Println("mes=",mes)
	fmt.Println()

	switch mes.Type {
	case message.LoginMesType:
		// 登录的消息类型
		up := &process2.UserProcess{
			Conn:p.Conn,
		}
		err = up.ServerProcessLogin(mes)
	case message.RegisterMesType:
		// 响应的消息类型
		up := &process2.UserProcess{
			Conn:p.Conn,
		}
		err = up.ServerProcessRegister(mes)
	case message.SmsMesType:  // 群发
		smsProcess := &process2.SmsProcess{}
		smsProcess.SendGroupMes(mes)

	default:
		fmt.Println("消息类型不存在，无法处理")
	}
	return
}

func (p *Processor) process2() (err error) {
	// 读取客户端
	for {
		// 讲读取消息的数据包封装成一个函数
		// 创建一个Transfer 瓦城都市里
		tf := &utils.Transfer{
			Conn: p.Conn,
		}
		msg, err := tf.ReadPkg()
		if err != nil {
			fmt.Println("readPkg failed, err=", err)
		}
		if err == io.EOF {
			fmt.Println("客户端关闭了连接")
			return err
		}
		// 处理消息
		err = p.serverProcessMes(&msg)
		if err != nil {
			return err
		}
	}
}
